﻿// Copyright 2013 Ronald Schlenker, www.technewlogic.de.
// 
// This file is part of Byond.
// 
// Byond is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
// 
// Byond is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Byond.  If not, see <http://www.gnu.org/licenses/>.

using System.Windows;
using Byond.UIRuntime;
using Utils.Documentation;

namespace Byond.PatchUiControls
{
	public abstract class ButtonBase : UiControl
	{
		static ButtonBase()
		{
			DefaultStyleKeyProperty.OverrideMetadata(
				typeof(ButtonBase),
				new FrameworkPropertyMetadata(typeof(ButtonBase)));

			ControlPropertyManager
				.RegisterProperty<ButtonBase>("PressDown")
				.BindAsAction((button, callback) =>
					button.PreviewMouseLeftButtonDown += (s, e) => callback(button.PressDownParam));
			ControlPropertyManager
				.RegisterProperty<ButtonBase>("PressUp")
				.BindAsAction((button, callback) =>
					button.PreviewMouseLeftButtonUp += (s, e) => callback(button.PressUpParam));
		}

		[Doc]
		public string PressDown { get; set; }
		
		[Doc]
		public int PressDownParam { get; set; }
		
		[Doc]
		public string PressUp { get; set; }
		
		[Doc]
		public int PressUpParam { get; set; }

		#region IsChecked DP

		[Doc]
		public bool IsChecked
		{
			get { return (bool)GetValue(IsCheckedProperty); }
			set { SetValue(IsCheckedProperty, value); }
		}

		// Using a DependencyProperty as the backing store for IsChecked.  This enables animation, styling, binding, etc...
		public static readonly DependencyProperty IsCheckedProperty =
			DependencyProperty.Register("IsChecked", typeof(bool), typeof(ButtonBase), new UIPropertyMetadata(false, (s, e) => ((ButtonBase)s).OnIsCheckedChanged()));

		#endregion

		protected virtual void OnIsCheckedChanged()
		{
			//Debug.WriteLine("IsChecked: " + IsChecked);
		}
	}
}
